import {nuxtBaseUrl,springBaseUrl,WX_CONFIG} from '../config/index'
import {postByForm} from '../static/common/util/http'

// 微信首页授权流程：
// 1）服务端：执行store.action.nuxtServerInit
// 在服务端的session中寻找user对象，若找不到跳转到oauth.vue页面，在url增加中增加参数visit=/，'/'表示根路径
// 2)服务端：执行oauth.vue页面的beforemount事件
// 执行action.getWechatOAuth方法，
// 向微信官服发起请求，查询用户信息，并保存到服务端session中，最后返回user对象，跳转到'/'跟路径
// 2.1向微信官服发请求，用access_token换取code，微信官服请求本地web服务/wechat/oauth将code放在url中
// 2.2执行本地web服务/wechat/oauth
// 用code换取网页授权access_token，用新access_token向微信官服换取用户信息，并保存入mongodb，保存入session


// 鉴权中间件，若在vuex中没找到用户信息，则跳转到微信用户鉴权页面
export default async function ({store, route, redirect,req,res}) {
  console.log('进入middleware.wechat-auth')
  console.log(store.state)
  // console.log(store.state.user)

  if(!store.state.user) {

    let {openid} = route.query
    console.log(`openid:${openid}`)

    if(!openid) {
      // let {fullPath} = route
      // fullPath = 'http://'+req.headers.host + fullPath
      fullPath = window.location.href
      console.log(fullPath)
  
      // 请求后台spring boot服务,获取用户信息
      // 注意：
      // middleware是nuxt服务端代码，axios请求不走nuxt代理转发
      // 但redirect()函数走nuxt代理，转发给spring boot
      // 所以，此处应使用相对路径nuxtBaseUrl，请求nuxt服务，然后转发给spring boot
      // fullPath中有"http://"等特殊字符，需要转码，否则发到spring boot端变成"http:/"
      // 否则回调地址变成：http:/www.monkeywood.club/?id=1
      // 最终返回给浏览器的地址变成：http://api.monkeywood.club/www.monkeywood.club/?id=1&openid=ocb-c1Z0nBAwvYh_zneP5UTLKXBc
      // nuxt后台服务域名与spring boot后台服务域名不同
      // nuxt的后台服务地址为：www.monkeywood.club
      // spring boot的后台服务地址为：api.monkeywood.club
      fullPath = encodeURIComponent(fullPath)
      subUrl = WX_CONFIG.getUserInfoStepOneUrl
      console.log(`${nuxtBaseUrl}${subUrl}?returnurl=${fullPath}`)
      return redirect(`${nuxtBaseUrl}${subUrl}?returnurl=${fullPath}`)
    } 
    else {
      console.log('post:')
      console.log(`${springBaseUrl}/getuser`)
      
      // 注意：
      // middleware是nuxt服务端代码，axios请求不走nuxt代理转发
      // 必须用spring boot地址
      // nuxt后台服务域名与spring boot后台服务域名不同
      // nuxt的后台服务地址为：www.monkeywood.club
      // spring boot的后台服务地址为：api.monkeywood.club
      let url = `${springBaseUrl}/getuser`
      let data = {"openid":openid}
      let res = await postByForm(url, data)
      console.log(res)
      let user=res.data

      store.commit('SET_USER', user)
      console.log("store.user:")
      console.log(store.user)

    }
    
  }

}